package com.sgb.kjwl.api.service;

import com.sgb.kjwl.model.entity.CommitVipPrice;
import com.sgb.kjwl.model.entity.CompanyStatusEntity;
import com.sgb.kjwl.model.entity.ConcreteDetailEntity;
import com.sgb.kjwl.model.entity.DemandHallListEntity;
import com.sgb.kjwl.model.entity.GoodsSkuDetailEntity;
import com.sgb.kjwl.model.entity.IndustryHomeListEntity;
import com.sgb.kjwl.model.entity.MaterialCompanyEntity;
import com.sgb.kjwl.model.entity.MemberPriceEntity;
import com.sgb.kjwl.model.entity.NewGoodsDetailEntity;
import com.sgb.kjwl.model.entity.STDetailEntity;
import com.sgb.kjwl.model.entity.STFilterEntity;
import com.sgb.kjwl.model.entity.STPublishEntity;
import com.sgb.kjwl.model.entity.SearchMaterialEntity3;
import com.sgb.kjwl.model.entity.SkuDetail;
import com.sgb.kjwl.model.entity.enterprise.IpPickSelectEntity;
import com.sgb.kjwl.model.entity.home.PictureEntity;
import com.sgb.kjwl.model.entity.manage.CategoriesGoodsEntity;
import com.sgb.kjwl.model.entity.manage.GoodsInquiryEntity;
import com.sgb.kjwl.model.entity.pricecheck.AttributeViewEntity;
import com.sgb.kjwl.model.entity.request.MaterialFilterJson;
import com.sgb.kjwl.model.entity.self.GoodsListEntity3;
import com.sgb.kjwl.model.entity.supplier3.DictEntity3;
import com.sgb.kjwl.model.entity.user.AddGoodsEntity;
import com.sgb.kjwl.model.entity.user.AddressEntity;
import com.sgb.kjwl.model.entity.user.AreaChooseEntity;
import com.sgb.kjwl.model.entity.user.ConcreteEntity;
import com.sgb.kjwl.model.entity.user.GoodsEntity;
import com.sgb.kjwl.model.entity.user.GoodsListEntity;
import com.sgb.kjwl.model.entity.user.MaterChooseEntity;
import com.sgb.kjwl.model.entity.user.PromoteGoodsEntity;
import com.sgb.kjwl.model.entity.user.RecommendListEntity;
import com.sgb.kjwl.model.entity.user.SearchSTEntity;
import com.sgb.kjwl.model.entity.user.SkuInfoEntity;
import com.sgb.kjwl.model.entity.user.TwoOrThreeLevelEntity;
import com.sgb.kjwl.model.entity.user.UnitEntity;
import com.swgk.core.base.model.entity.BaseEntity;
import com.swgk.core.base.model.entity.ListResponse;
import com.swgk.core.base.model.factory.BaseUrlInterceptor;
import com.swgk.core.view.entity.MenuEntity;

import java.util.List;
import java.util.Map;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.POST;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Url;

/**
 * @author gaowei
 * @date 2019/8/3
 */

public interface GoodsAPI {

    /**
     * 商品发布-获取商品列表
     *
     * @param status
     * @param pageNum
     * @param pageSize
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/products")
    Call<BaseEntity<GoodsEntity>> getGoodsList(@Field("status") String status, @Field("pageNum") int pageNum, @Field("pageSize") int pageSize);

    /**
     * 商品发布-商品下架
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/products/off")
    Call<BaseEntity> downGoods(@Field("id") String id);

    /**
     * 商品发布-商品上架
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/products/on")
    Call<BaseEntity> upGoods(@Field("id") String id);

    /**
     * 商品发布-删除商品
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/products/delete")
    Call<BaseEntity> deleteGoods(@Field("id") String id);

    /**
     * 商品发布-新增商品
     *
     * @param entity
     * @return
     */
    @POST("v1/app/user/products/add")
    Call<BaseEntity> addGoods(@Body AddGoodsEntity entity);

    /**
     * 商品发布-编辑商品
     *
     * @param entity
     * @return
     */
    @POST("v1/app/user/products/modify")
    Call<BaseEntity> editGoods(@Body AddGoodsEntity entity);

    /**
     * 商品发布-获取商品详情
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/products/queryById")
    Call<BaseEntity<AddGoodsEntity>> getGoodsById(@Field("id") String id);

    /**
     * 新商品发布-获取商品详情 李乔
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/goodsDetail")
    Call<BaseEntity<NewGoodsDetailEntity>> goodsDetail(@Field("id") String id);

    /**
     * 用户中心获取商品和商砼列表
     *
     * @param map
     * @return
     */
    @POST("v1/app/user/goods/myGoodsList")
    Call<BaseEntity<ListResponse<List<GoodsListEntity3>>>> myGoodsList(@Body Map map);

    /**
     * 商砼详情（购物车进入）
     *
     * @param id
     * @return
     */
    @POST("v1/app/material/concreteDetail")
    Call<BaseEntity<ConcreteDetailEntity>> getConcreteDetail(@Query("id") String id);

    /**
     * 商砼详情（筛选列表进入）
     *
     * @param id
     * @param strengthId
     * @param gradationId
     * @param serviceId
     * @return
     */
    @POST("v1/app/material/concreteDetail")
    Call<BaseEntity<ConcreteDetailEntity>> getConcreteDetail(@Query("id") String id, @Query("strengthId") String strengthId, @Query("gradationId") String gradationId, @Query("serviceId") String serviceId);

    /**
     * 新商品发布-获取商砼详情 李乔
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/concreteDetail")
    Call<BaseEntity<STDetailEntity>> concreteDetail(@Field("id") String id);

    /**
     * 商砼发布详情
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/concretePublishDetail")
    Call<BaseEntity<STPublishEntity>> concretePublishDetail(@Field("id") String id);

    /**
     * 商品发布-获取商品单位
     *
     * @return
     */
    @POST("v1/app/user/products/selectUnit")
    Call<BaseEntity<List<UnitEntity>>> selectUnit();

    /**
     * 获取三级地址列表
     *
     * @return
     */
    @GET("common/simpleArea.json")
    Call<BaseEntity<List<AddressEntity<List<AddressEntity<List<AddressEntity>>>>>>> getCityList();

    @Headers({BaseUrlInterceptor.HEADERS_URL_JY, "tokenType:pc"})
    @GET("common/simpleArea.json")
    Call<BaseEntity<List<AddressEntity<List<AddressEntity<List<AddressEntity>>>>>>> getCityList2();

    /**
     * 获取城市数据
     *
     * @param url
     * @return
     */
    @Headers("tokenType:pc")
    @GET()
    Call<BaseEntity<List<AddressEntity<List<AddressEntity<List<AddressEntity>>>>>>> getCityList2(@Url String url);

    /**
     * 获取二级地址列表
     *
     * @return
     */
    @GET("common/simpleArea.json")
    Call<BaseEntity<List<AddressEntity<List<AddressEntity>>>>> getLocateList();

    /**
     * 我的商品改价（入参：id，price）
     *
     * @param id
     * @param price
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/products/modifyPrice")
    Call<BaseEntity> modifyPrice(@Field("id") String id, @Field("price") String price);

    /**
     * 商品详情-用户关注企业状态
     *
     * @param shopId
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/getuserFocusCompanyStatus")
    Call<BaseEntity> getuserFocusCompanyStatus(@Field("shopId") String shopId);

    /**
     * 商品详情-用户关注商品状态
     *
     * @param map
     * @return
     */
    @POST("v1/app/user/goods/getuserFocusStatus")
    Call<BaseEntity> getuserFocusStatus(@Body Map map);

    /**
     * 商品详情-用户关注商品状态
     *
     * @param skuid
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/userFocus")
    Call<BaseEntity> userFocus(@Field("skuid") String skuid);

    /**
     * 商品详情-用户关注企业状态
     *
     * @param companyNo
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/user/goods/userFocusCompany")
    Call<BaseEntity> userFocusCompany(@Field("shopId") String companyNo);

    /**
     * 判断商品属性是否可选(根据所选属性组合)
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/buyer/getGoodsAttributeEnabled")
    Call<BaseEntity<SkuInfoEntity>> getGoodsAttributeEnabled(@Body Map map);

    /**
     * 获取工程材料距离选择条件数据
     *
     * @param cid1
     * @return
     */
    @GET("v1/app/material/buyer/distanceChoose")
    Call<BaseEntity<List<DictEntity3>>> getMaterialDistanceData(@Query("cid1") String cid1);

    /**
     * 商砼 商品侧边栏筛选
     *
     * @param areaCode
     * @param cid1
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/concreteChoose")
    Call<BaseEntity<STFilterEntity>> getSTFilter(@Field("areaCode") String areaCode, @Field("cid1") String cid1);

    /**
     * 商砼 商品侧边栏筛选
     *
     * @return
     */
    @POST("v2/app/index/publishMenu")
    Call<BaseEntity<List<MenuEntity>>> publishMenu();

    /**
     * 首页发布-根据type参数请求菜单内容
     *
     * @param type
     * @return
     */
    @GET("v2/app/index/publishMenuByModuleType")
    Call<BaseEntity<List<MenuEntity>>> publishMenuByModuleType(@Query("type") String type);

    /**
     * 获取经营类型
     *
     * @return
     */
    @GET("v1/app/enterpriseServices/teamInfo/getAllCategory")
    Call<BaseEntity<List<IpPickSelectEntity>>> serviceType();

    /**
     * 商品发布-获取商品列表
     *
     * @param map
     * @return
     */
    @POST("v1/app/user/goods/promote/findPromoteGoods")
    Call<BaseEntity<List<PromoteGoodsEntity>>> findPromoteGoods(@Body Map map);

    /**
     * 获取商品二级和三级分类数据
     *
     * @param areaCode
     * @param id
     * @return
     */

    @GET("v1/app/material/buyer/categoryChoose")
    Call<BaseEntity<List<TwoOrThreeLevelEntity>>> findTwoOrThreeLevelData(@Query("areaCode") String areaCode, @Query("id") String id);

    /**
     * 获取商品列表数据
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/buyer/goodsList")
    Call<BaseEntity<ListResponse<List<GoodsListEntity>>>> getGoodsList(@Body Map<String, Object> map);

    /**
     * 获取商品推荐数据
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/buyer/recommandMaterials")
    Call<BaseEntity<ListResponse<List<RecommendListEntity>>>> getRecommendList(@Body Map<String, Object> map);

    /**
     * 商品详情--平台声明
     *
     * @return
     */
    @GET("v1/app/user/goods/getPlatformStatementH5Url")
    Call<BaseEntity<String>> getPlatformStatement();

    /**
     * 商品详情模块—推荐商品
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/recommends")
    Call<BaseEntity<ListResponse<List<RecommendListEntity>>>> getGoodsDetailsRecommendList(@Body Map<String, Object> map);

    /**
     * 商品首页 -- 自营商品
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/buyer/selfSupportMaterials")
    Call<BaseEntity<ListResponse<List<RecommendListEntity>>>> getSelfSupportList(@Body Map<String, Object> map);

    /**
     * 商品首页 -- 促销商品
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/buyer/promotionsList")
    Call<BaseEntity<ListResponse<List<RecommendListEntity>>>> getPromotionsList(@Body Map<String, Object> map);

    /**
     * 商品规格材质
     *
     * @param map
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/materChoose")
    Call<BaseEntity<List<MaterChooseEntity>>> getMaterChoose(@FieldMap Map<String, Object> map);

    /**
     * 筛选距离列表
     *
     * @param cid1
     * @return
     */
    @GET("v1/app/material/buyer/distanceChoose")
    Call<BaseEntity<List<DictEntity3>>> getGoodsMaterialDistanceData(@Query("cid1") String cid1);

    /**
     * 商品 品牌
     *
     * @param areaCode
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/brandChoose")
    Call<BaseEntity<List<DictEntity3>>> getBrandChoose(@Field("areaCode") String areaCode, @Field("id") String id);

    @FormUrlEncoded
    @POST("v1/app/material/buyer/itemChoose")
    Call<BaseEntity<List<DictEntity3>>> getItemChoose(@Field("areaCode") String areaCode, @Field("id") String id);

    @FormUrlEncoded
    @POST("v1/app/material/buyer/goodsChoose")
    Call<BaseEntity<List<AreaChooseEntity>>> getAreaChoose(@Field("areaCode") String areaCode);

    @POST("v1/app/material/buyer/concreteList")
    Call<BaseEntity<ListResponse<List<ConcreteEntity>>>> getConcreteList(@Body Map<String, Object> areaCode);

    @POST("v1/app/material/buyer/concreteList")
    Call<BaseEntity<ListResponse<List<SearchMaterialEntity3>>>> getHomeSTList(@Body MaterialFilterJson materialFilterJson);

    /**
     * 获取商砼列表
     *
     * @param materialFilterJson
     * @return
     */
    @POST("v1/app/material/buyer/concreteList")
    Call<BaseEntity<ListResponse<List<SearchSTEntity>>>> getSTList(@Body MaterialFilterJson materialFilterJson);

    /***
     *企业网站 -经营业务-商品经营
     * @param companyNo
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/reverseLookupTreeNode")
    Call<BaseEntity<List<CategoriesGoodsEntity>>> getReverseLookupTreeNode(@Field("companyNo") String companyNo);

    /***
     *企业网站 -需求公告-商品需求
     * @param companyNo
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/reverseLookupTreeNodeByEn")
    Call<BaseEntity<List<GoodsInquiryEntity>>> getReverseLookupTreeNodeByEn(@Field("companyNo") String companyNo);

    /**
     * 获取图查信息列表
     *
     * @return
     */
    @POST("v2/app/index/pictureList")
    Call<BaseEntity<List<PictureEntity>>> getPictureList();


    /**
     * 店铺详情
     *
     * @param id
     * @return
     */
    @GET("v1/app/material/shopDetail")
    Call<BaseEntity<MaterialCompanyEntity>> getMaterialShopDetail(@Query("id") String id);

    /**
     * 需求大厅数据列表信息
     *
     * @param map
     * @return
     */
    @POST("v1/app/material/demandHall/enquirySearch")
    Call<BaseEntity<ListResponse<List<DemandHallListEntity>>>> getDemandHallList(@Body Map map);

    /**
     * 获取属性
     *
     * @param id
     * @param areaCode
     * @return
     */
    @FormUrlEncoded
    @POST("v1/app/material/buyer/materChoose")
    Call<BaseEntity<List<AttributeViewEntity>>> getAttribute(@Field("id") String id, @Field("areaCode") String areaCode);


    /**
     * 材料详情
     *
     * @param id
     * @param skuid
     * @return
     */
    @GET("v1/app/material/detail/{skuid}/{id}")
    Call<BaseEntity<GoodsSkuDetailEntity>> getSkuDetail(@Path("id") String id, @Path("skuid") String skuid);

    /**
     * 获取会员价详情
     *
     * @return
     */
    @GET
    Call<BaseEntity<MemberPriceEntity>> getMemberPriceDetails(@Url String url);

    /**
     * 获取sku会员价详情信息
     *
     * @return
     */
    @GET
    Call<BaseEntity<List<MemberPriceEntity.MemberPriceSkuDetail>>> getSkuMemberPriceDetail(@Url String url);


    /**
     * 【V1.4.9】保存会员价格
     *
     * @param data
     * @return
     */
    @POST("item/member/addItemMember")
    Call<BaseEntity> commitVipPrice(@Body CommitVipPrice data);

    /**
     * 根据商品id获取sku列表(设置商品会员价格使用)
     *
     * @return
     */
    @GET
    Call<BaseEntity<SkuDetail>> getSkuList(@Url String url);


    /**
     * 获取首页行业列表
     */
    @POST("v1/app/material/buyer/getIndustryList")
    Call<BaseEntity<IndustryHomeListEntity>> getIndustryList();


    /**
     * 获取行业id
     */
    @GET("v1/app/material/buyer/getIndustryIdByFirstCategory")
    Call<BaseEntity<Object>> getIndustryid(@Query("CategoryId")String CategoryId);

    /**
     * 获取企业状态
     */
    @GET("v1/app/material/getCompanyStatus/{companyNo}")
    Call<BaseEntity<CompanyStatusEntity>> getCompanyStatus(@Path("companyNo") String companyNo);

}